/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.seguradora.persistence;

import br.com.seguradora.model.Endereco;
import br.com.seguradora.model.constant.UnidadeFederativa;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Diego
 */
public class BaseDeCeps {

    private static final String fonte = "jdbc:mysql://localhost/troca_cheque";
    private static final String destino = "jdbc:mysql://localhost/seguradora";
    private static List<Endereco> lista = new ArrayList<Endereco>();

    public static void main(String[] args) {
        try {
            
            // ------------------------- varre todos os endereços
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection(fonte, "root", "");
            String queryDados = "SELECT L.DS_LOGRADOURO_NOME, L.NO_LOGRADOURO_CEP, B.DS_BAIRRO_NOME, C.DS_CIDADE_NOME, U.DS_UF_SIGLA "
                    + "FROM LOGRADOURO L INNER JOIN BAIRRO B ON L.CD_BAIRRO = B.CD_BAIRRO INNER JOIN CIDADE C ON B.CD_CIDADE = C.CD_CIDADE "
                    + "INNER JOIN UF U ON C.CD_UF = U.CD_UF WHERE U.DS_UF_SIGLA='PE' ORDER BY L.DS_LOGRADOURO_NOME";
            //35745 endereços em PE
            String queryCount = "SELECT COUNT(*) as COUNT "
                    + "FROM LOGRADOURO L INNER JOIN BAIRRO B ON L.CD_BAIRRO = B.CD_BAIRRO INNER JOIN CIDADE C ON B.CD_CIDADE = C.CD_CIDADE "
                    + "INNER JOIN UF U ON C.CD_UF = U.CD_UF WHERE U.DS_UF_SIGLA='PE' ORDER BY L.DS_LOGRADOURO_NOME";
            PreparedStatement pr = conn.prepareStatement(queryDados);
            ResultSet rs = pr.executeQuery();
            while (rs.next()) {
                lista.add(new Endereco(rs.getString("NO_LOGRADOURO_CEP"), rs.getString("DS_LOGRADOURO_NOME"),
                        rs.getString("DS_BAIRRO_NOME"), rs.getString("DS_CIDADE_NOME"),
                        UnidadeFederativa.valueOf(rs.getString("DS_UF_SIGLA"))));
            }
            
            // ------------------------- insere todos os endereços recuperados anteriormente
            conn = DriverManager.getConnection(destino, "root", "");
            String queryInsere = "INSERT INTO ENDERECO(ID, CEP, LOGRADOURO, BAIRRO, CIDADE, ESTADO) VALUES(NULL, ?, ?, ?, ?, ?);";
            pr = conn.prepareStatement(queryInsere);
            for (Endereco endereco : lista) {
                pr.setString(1, endereco.getCep());
                pr.setString(2, endereco.getLogradouro());
                pr.setString(3, endereco.getBairro());
                pr.setString(4, endereco.getCidade());
                pr.setString(5, endereco.getUf().name());

                pr.executeUpdate();
                pr.clearParameters();
                endereco = null;
            }
            
            rs.close();
            pr.close();
            conn.close();
            
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
}
